//shop.js
const { url, imgUrl } = require('../../config/index.js') // 接口请求地址

Page({
  // 页面的初始数据
  data: {
    imgUrl: imgUrl, // 图片拼接地址
    scrollTimer: null, // 节流用
    listsMoveDis: '100%', // 已点列表(购物车)位移距离
    winHeight: 0, // 页面高
    headerHeight: 0, // 头部高度
    mainHeight: 0, // scroll-view 高度
    footerHeight: 0, // footer的高
    goodsListHeight: 0,
    shopinfo: {}, // 店铺位置等相关信息
    shopAllInfo: {}, // 店铺所有商品信息
    allCommentsNumber: 0, // 评论数量
    shoppingCarInfo: {}, // 购物车
    totalPrice: 0, // 总价格
    totalNumber: 0, // 总数量
    showShoppingCar: false, // 是否显示购物车
    showMulti: false, // 是否显示多规格
    showBg: false, // 是否显示透明背景
    manyTypeInfo: null, // 多规格商品信息
    multiSelect: [], // 多规格商品选择索引
    multiMainNum: {}, // 多规格主商品数量
    cafeActivity: [], // 活动数组
    viewId: '',
    scrollTop: 0,
    scrollDom: 'id0', // 商品列表要滚动到的DOM
    nowIndex: 0, // 当前商品类别索引
    listsMoveDis: '100%' // 已点列表(购物车)位移距离

  },
  // 换店
  changeShop () {
    wx.redirectTo({
      url: '/pages/shopList/shopList',
    })
  },
  // 显示列表
  showLists () {
    this.setData({
      listsMoveDis: '0%'
    })
  },
  // 多规格显示
  muShow () {
    this.setData({
      showMulti: true,
      showBg: true
    })
  },
  // 下一步，确认订单
  toReadyPay () {
    // if (this.data.showMulti) {
    //   // 打开多规格选项，点击选好了

    // }
    if ( this.data.totalNumber===0 ) {
      return
    } 
    let readyPayInfo = {
      payInfo: this.data.shoppingCarInfo, // 商品列表
      totalPay: this.data.totalPrice // 总价
    }
    console.log(JSON.stringify(readyPayInfo))
    wx.setStorageSync('readyPayInfo', readyPayInfo) // 商品列表
    wx.navigateTo({
      url: '/pages/firmOrder/firmOrder',
    })
  },
  // 显示关闭购物车
  showHideSCar () {
    if (this.data.totalNumber === 0) return
    if (this.data.showShoppingCar) {
      this.setData({
        showShoppingCar: false,
        showBg: false
      })
      return
    }
    this.setData({
      showShoppingCar: true,
      showBg: true
    })
  },
  // 点击透明背景
  tabBg () {
    this.setData({
      showShoppingCar: false,
      showMulti: false,
      showBg: false
    })
  },
  // 添加商品
  addGoods (e) {
    let info = e.currentTarget.dataset.info
    let indexs = e.currentTarget.dataset.indexs

    let i = indexs ? indexs : info.SERV_ID
    
    // console.info(info)
    
    if (!this.data.shoppingCarInfo[i]) { // 购物车内没有该商品，初始其数量为1
      // 创建一个中转对象 (复制一份)  
      let transferInfo = JSON.parse(JSON.stringify(info));
      transferInfo.countForCar = 1 // 初始其数量为1
      let transferObj = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
      transferObj[i] = transferInfo
      this.setData({
        shoppingCarInfo: transferObj
      })
      // console.info(this.data.shoppingCarInfo)

    } else { // else 数量 + 1
      // 创建一个中转对象 (复制一份)  
      let transferObj = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
      transferObj[i].countForCar++
      this.setData({
        shoppingCarInfo: transferObj
      })
    }
    // 金额计算
    this.computePrice()
    // 计算多规格主商品数量
    this.multiMum()
  },
  // 移除商品
  removeGoods (e) {
    let info = e.currentTarget.dataset.info
    let indexs = e.currentTarget.dataset.indexs
    let i = indexs ? indexs : info.SERV_ID
    // console.log(indexs)
    if (this.data.shoppingCarInfo[i]) { // 存在该商品id 则数量 -1 
      if (this.data.shoppingCarInfo[i].countForCar == 1) {
        // 当减到只有一件的时候直接删掉
        let transferObj = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
        delete transferObj[i] // 删
        this.setData({
          shoppingCarInfo: transferObj
        })
        // 金额计算
        this.computePrice()
        this.multiMum()
        return;
      }
      // else 商品数量 -1
      let transferObj2 = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
      transferObj2[i].countForCar-- // -1
      this.setData({
        shoppingCarInfo: transferObj2
      })
    }
    // 金额计算
    this.computePrice()
    // 计算多规格主商品数量
    this.multiMum()
  },
  // 打开多规格商品选择
  openMultiple (e) {
    let info = e.currentTarget.dataset.info
    // console.info(info)

    let multiSelect = []
    let l = info.ATTR_LIST.length
    for ( let w = 0; w < l; w++ ) {
      multiSelect.push(0)
    }
    this.setData({
      manyTypeInfo: info,
      showMulti: true,
      showBg: true,
      multiSelect: multiSelect
    })

    // console.log(this.data.multiSelect)
  },
  // 多规格商品选择索引
  pushMultiIndex (e) {
    let info = e.currentTarget.dataset
    // console.info(info)
    let trans = this.data.multiSelect
    trans[info.first] = info.second
    this.setData({ multiSelect: trans })
    // console.log(this.data.multiSelect)
    
  },
  // 多规格商品选择确定
  makeSureAddMulti (e) {
    let arr = this.data.manyTypeInfo, // 多规格商品信息
        index = this.data.multiSelect, // 选择索引信息
        id = arr.SERV_ID, // 主商品id
        name = arr.SERV_SUBJECT, // 主商品名
        price = Number(arr.PRICE) // 主商品价格
    for (let i = 0; i < index.length; i++) {
      id = id + '$' + arr.ATTR_LIST[i].ATTRIBURE[index[i]].SERV_ID
      name = name + '+' + arr.ATTR_LIST[i].ATTRIBURE[index[i]].SERV_NAME
      price = price + Number(arr.ATTR_LIST[i].ATTRIBURE[index[i]].PRICE)
    }
    arr._name_ = name
    arr._price_ = price
    this.nowAddMulti(id, arr)
    this.tabBg()
  },
  // 向购物车添加多规格
  nowAddMulti (id, info) {
    if (!this.data.shoppingCarInfo[id]) { // 购物车内没有该商品，初始其数量为1
      // 创建一个中转对象  
      let transferInfo = JSON.parse(JSON.stringify(info));
      transferInfo.countForCar = 1 // 初始其数量为1
      let transferObj = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
      transferObj[id] = transferInfo
      this.setData({
        shoppingCarInfo: transferObj
      })
      // console.info(this.data.shoppingCarInfo)

    } else { // else 数量 + 1
      // 创建一个中转对象  
      let transferObj = JSON.parse(JSON.stringify(this.data.shoppingCarInfo))
      transferObj[id].countForCar++
      this.setData({
        shoppingCarInfo: transferObj
      })
    }
    
    // 计算价格
    this.computePrice()
    // 计算多规格主商品数量
    this.multiMum()
  },
  // 计算多规格主商品数量
  multiMum () {
    let multiMainNum = {},
    s = this.data.shoppingCarInfo
    // console.log(this.data.shoppingCarInfo)
    for (let o in s) {
      if (s[o].ATTR_LIST.length) {
        if (multiMainNum[o.split('$')[0]]) {
          multiMainNum[o.split('$')[0]].nub += s[o].countForCar
        } else {
          multiMainNum[o.split('$')[0]] = { nub: s[o].countForCar }
        }
      }
    }
    this.setData({ multiMainNum: multiMainNum })
    // console.warn(this.data.multiMainNum)
    // console.log(this.data.multiMainNum)
    // console.log(122222222222222)
  },
  // 计算总价格
  computePrice(){
    let car = this.data.shoppingCarInfo
    // console.log(car)
    let totalPrice = 0
    let totalNumber = 0
    for (let x in car) {
      // console.info(car[x])
      if (car[x].ATTR_LIST.length){
        totalPrice += car[x]._price_ * car[x].countForCar
      } else {
        totalPrice += car[x].PRICE * car[x].countForCar
      }
      totalNumber += car[x].countForCar
    }
    // console.log(totalPrice)
    // console.log(totalNumber)
    totalPrice = totalPrice == 0 ? 0 : totalPrice.toFixed(2)
    this.setData({
      totalPrice: totalPrice, // 总价
      totalNumber: totalNumber // 总数量
    })
    if (totalNumber === 0) {
      console.log(1)
      this.tabBg()
    }
    console.warn(this.data.shoppingCarInfo)
  },
  // 类别点击
  clickToGoods (e) {
    let index = e.currentTarget.dataset.gindex
    this.setData({ viewId: 'view' + index })
  },
  // 初始化时获取每个大类别距离顶部的高度
  getMainTypeTop () {
    const query = wx.createSelectorQuery() // 小程序选择DOM方法
    let topArr = []
    query.selectAll('.type_title_in_list').boundingClientRect(rects => {
      rects.forEach((rect, index) => {
        let top = rect.top // 每个标题相对于scroll-view的top值
        topArr.push(top)
      })
      this.setData({ topArr: topArr})
    }).exec()
  },
  // 列表滚动
  scroll(e) {
    const scrollTop = e.detail.scrollTop // 滚上去的高度
    // 设置分类的固定
    if (scrollTop >= this.data.headerHeight) {
      this.setData({
        fixedBar: true,
        goodsListHeight: this.data.winHeight - this.data.footerHeight
      })
    } else {
      this.setData({ fixedBar: false })
    }
    // this.data.scrollTimer
    // 滚动时获取标题位置
    // const query = wx.createSelectorQuery() // 小程序选择DOM方法
    let nowIndex = 0 // 当前滚动索引
    // console.log(scrollTop)
    this.data.topArr.forEach((e, i) => {
      // console.log(scrollTop)
      if (e <= scrollTop) {
        nowIndex = i
      }
    })
    // console.log(nowIndex)
    this.setData({
      nowIndex: nowIndex
    })
  },
  // scroll (e) {
  //   const scrollTop = e.detail.scrollTop
  //   // 设置分类的固定
  //   if (scrollTop >= this.data.headerHeight){
  //     this.setData({
  //       fixedBar: true,
  //       goodsListHeight: this.data.winHeight - this.data.footerHeight
  //     })
  //   } else {
  //     this.setData({fixedBar: false})
  //   }
  //   // this.data.scrollTimer
  //   // 滚动时获取标题位置
  //   const query = wx.createSelectorQuery() // 小程序选择DOM方法
  //   let nowIndex = 0 // 当前滚动索引
  //   query.selectAll('.type_title_in_list').boundingClientRect(rects => {
  //     rects.forEach((rect, index) => {
  //       let top = rect.top // 每个标题相对于scroll-view的top值
  //       console.log(top)
  //       if (top <= 0) {
  //         nowIndex = index // 当前类目索引
  //       }
  //     })
  //     // console.info('索引', + nowIndex)
  //     this.setData({
  //       nowIndex: nowIndex
  //     })
  //   }).exec()
  // },
  // 获取相关系统信息
  getSysInfo () {
    const query = wx.createSelectorQuery() // 小程序选择DOM方法
    wx.getSystemInfo({ // 获取系统信息
      success: res => {
        let winHeight = res.windowHeight // 屏幕高度 （注：在调试模式下，真机获取的高度比开发工具少48，这48为tabBar的高度）
        this.setData({ winHeight: winHeight }) 
        let reduxHeight = 0
        // 计算head，foot高度
        query.selectAll('.compute').boundingClientRect(rects => {
          // console.info(rects)
          rects.forEach((rect, i) => {
            if (i === 0) {
              // 头部的高
              this.setData({ headerHeight: rect.height })
            } else {
              this.setData({
                footerHeight: rect.height, // footer的高
                mainHeight: winHeight - rect.height, // scroll-view 高度
                goodsListHeight: winHeight - rect.height - this.data.headerHeight // 类别高度

              })
            }

          })
        }).exec()
      },
    })
  },
  // 查询店铺商品
  shopQuery (shopid) {
    wx.showLoading({mask: true})
    // 获取首页banner图
    wx.request({
      url: url + 'Coffee/get4sCafeList.action',
      method: 'POST',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: {
        COMP_ID: shopid || '4SCAFE01MJL'
      },
      success: res => {
        wx.hideLoading()
        // console.log(res.data)
        if (res.data.STATUS_CODE === 1) {
          this.setData({
            shopAllInfo: res.data
          })
          // 获取每个大类别初始时距离顶部的高度
          this.getMainTypeTop()
        }
      }
    })
  },
  // 获取评价
  getComments (shopid) {
    wx.request({
      url: url + 'ServComment/getShopComment.action',
      method: 'POST',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: {
        COMP_ID: shopid || '4SCAFE01MJL',
        PAGE_NO: 1,
        PAGE_SIZE: 15,
        CATEGORY: 'all'
      },
      success: res => {
        if (res.data.STATUS_CODE === 1) {
          this.setData({
            allCommentsNumber: res.data.EVAL_ALL
          })
        }
      }
    })
  },
  // 获取活动
  getVipAct(shopid) {
    wx.request({
      url: url + 'CafeActivity/getCafeActivityBaner.action',
      method: 'POST',
      header: {
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: {
        COMP_ID: shopid || '4SCAFE01MJL',
        USER_ID: wx.getStorageSync('userInfo').USER_ID
      },
      success: res => {
        if (res.data.STATUS_CODE === 1) {
          this.setData({ cafeActivity: res.data.ACTIVITY_LIST})
        }
        // 获取相关系统信息
        this.getSysInfo()
      }
    })
  }, 
  // 跳转活动
  goVipAat (e) {
    let actId = e.currentTarget.dataset.it.CAFE_ACTIVITY_ID
    console.log(e)
    wx.navigateTo({
      url: '/pages/setMeal/setMeal?actid=' + actId
    })
  },
  // 看评论
  watchComments () {
    wx.navigateTo({
      url: '/pages/evaluateList/evaluateList?shopid=' + wx.getStorageSync('shopinfo').COMP_ID,
    })
  },
  // 生命周期函数--监听页面加载
  onLoad: function (options) {
    // 获取页面传值查询店铺商品
    let shopQuery = options
    this.shopQuery(shopQuery.shopid)
    // 获取评价
    this.getComments(shopQuery.shopid)
    // 获取店铺会员活动
    this.getVipAct(shopQuery.shopid)

  },
  // 生命周期函数--监听页面初次渲染完成
  onReady: function () {

  },
  // 生命周期函数--监听页面显示
  onShow: function (options) {
    let shopinfo = wx.getStorageSync('shopinfo')
    // wx.removeStorageSync('shopinfo')
    this.setData({
      shopinfo: shopinfo
    })
  },
  // 生命周期函数--监听页面隐藏
  onHide: function () {
  },
  // 生命周期函数--监听页面卸载
  onUnload: function () {
  },
  // 页面相关事件处理函数--监听用户下拉动作
  onPullDownRefresh: function () {
  },
  // 页面上拉触底事件的处理函数
  onReachBottom: function () {
  },
  // 用户点击右上角转发
  onShareAppMessage: function () {
  },
  // 页面滚动触发事件的处理函数
  onPageScroll: function () {
  },
  // 当前是 tab 页时，点击 tab 时触发
  onTabItemTap() {
  }
})
